<?php

namespace app\common\service;

use think\Controller;
use think\Db;
use think\cache\driver\Redis;

/**
 *   通知service
 * Class Workers
 * @package app\babyapi\controller
 */
class NoticeService {

	/**
	 * 消息通知--若有formId直接发送小程序模板消息,若无则发送服务号模板消息,若以上两者均发送失败,发送短信通知
	 * @param string $openid 小程序openid或者公众号openid
	 * @param string $weapp_template_id 小程序模板ID
	 * @param string $template_url 跳转小程序页面路径 pages/home/home?id=1
	 * @param array $weapp_template_data 小程序模板数据
	 * @param string $weapp_template_keyword 小程序放大关键字
	 * @param string $mp_template_id 公众号模板消息ID
	 * @param string $mp_template_data 公众号模板消息数据
	 * @param string $sms_tel 发送短信电话
	 * @param string $sms_content 发送短信内容
	 * @return type
	 */
	public static function sendNotifiy($openid, $weapp_template_data, $weapp_template_id, $weapp_template_keyword, $sms_tel, $sms_content, $weapp_template_url, $mp_template_id, $mp_template_data) {
		$mp_wx_config = config('wechat');
		$wx_config = config('work_wx');
		$mp_template_msg = array(
			'appid' => $mp_wx_config['appId'],
			'template_id' => $mp_template_id,
			'url' => 'https://www.youheone.com',
			'miniprogram' => array(
				"appid" => $wx_config['appId'],
				"pagepath" => $weapp_template_url
			),
			'data' => $mp_template_data
		);
		$weapp_form_id = $this->getFormId($openid);
		$WxAuth = new WxAuth($wx_config["appId"], $wx_config["appSecret"]);
		$res = false;
		if (empty($weapp_form_id) || $weapp_form_id == false) {//不存在有效formId时发送公众号模板消息
			if (!empty($mp_template_id) && !empty($mp_template_data)) {
				$res = $WxAuth->smallSendUniformMessage($openid, array(), $mp_template_msg);
			}
		} else {//存在formID 发送小程序模板消息
			$weapp_template_msg = array(
				'template_id' => $weapp_template_id,
				'page' => $weapp_template_url,
				'form_id' => $weapp_form_id,
				'data' => $weapp_template_data,
				'emphasis_keyword' => $weapp_template_keyword
			);
			$res = $WxAuth->smallSendUniformMessage($openid, $weapp_template_msg, $mp_template_msg);
		}

		//如果小程序模板消息和公众号模板消息都发送失败,发送短信
		if (!$res) {
			$res = sendSms($sms_tel, $sms_content);
			sleep(1);
		}
		return $res;
	}

	/**
	 * @desc   保存获取
	 * @param  
	 * @date   2018-08-04
	 * @author lcx
	 * @return [type]     [description]
	 */
	public static function getFormId($openid) {
		$redis = new Redis();
		$key = 'ubaby_formid:' . $openid;
		$arr = $redis->rPop($key);
		if (empty($arr)) {
			return false;
		}
		$data = json_decode($arr, true);
		if ($data['expire_time'] > time() && !empty($data['formId'] ?? '')) {
			return $data['formId'];
		} else {
			$this->getFormId($openid);
		}
	}

}
